package com.huashi.dealer.modular.business.balance.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huashi.dealer.commonEntity.UserBalanceLog;
import com.huashi.dealer.commonEntity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;

/**
 * 余额相关Mapper接口
 *
 * @author 系统生成
 * @since 2025-01-27
 */
@Mapper
@Component("apiBalanceMapper")
public interface BalanceMapper extends BaseMapper<UserBalanceLog> {

    /**
     * 获取用户余额日志列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 余额日志列表
     */
    Page<UserBalanceLog> getBalanceLogList(@Param("userId") Long userId, @Param("page") Page<UserBalanceLog> page, @Param("type") Integer time);

    /**
     * 获取用户余额详情
     * @param userId 用户ID
     * @return 用户余额信息
     */
    User getUserBalanceDetail(@Param("userId") Long userId);

    /**
     * 获取用户余额变动统计
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 余额变动统计
     */
    BigDecimal getBalanceStatistics(@Param("userId") Long userId, 
                                   @Param("startDate") String startDate, 
                                   @Param("endDate") String endDate);

    /**
     * 根据场景类型获取余额日志
     * @param userId 用户ID
     * @param scene 场景类型
     * @param page 分页参数
     * @return 余额日志列表
     */
    IPage<UserBalanceLog> getBalanceLogByScene(@Param("userId") Long userId,
                                               @Param("scene") Integer scene,
                                               @Param("page") Page<UserBalanceLog> page);

    /**
     * 获取用户余额申请列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 余额申请列表
     */
    IPage<Object> getBalanceApplyList(@Param("userId") Long userId, @Param("page") Page<Object> page);

    /**
     * 获取余额申请详情
     * @param applyId 申请ID
     * @param userId 用户ID
     * @return 申请详情
     */
    Object getBalanceApplyDetail(@Param("applyId") Long applyId, @Param("userId") Long userId);

    /**
     * 更新用户余额
     * @param userId 用户ID
     * @param amount 变动金额
     * @return 更新结果
     */
    int updateUserBalance(@Param("userId") Long userId, @Param("amount") BigDecimal amount);

    /**
     * 添加余额变动记录
     * @param balanceLog 余额日志
     * @return 插入结果
     */
    int insertBalanceLog(@Param("balanceLog") UserBalanceLog balanceLog);
} 